package LC;

import java.util.Arrays;

/**
 * @author lhn
 * @date 2024-09-20 16:01
 * 给定一个整数数组 nums，将数组中的元素向右轮转 k 个位置，其中 k 是非负数。
 */

public class RotateArray {
    public static void main(String[] args) {
        int[] nums1 = {1, 2, 3, 4, 5, 6, 7};
        rotate(nums1, 3);
        System.out.println(Arrays.toString(nums1));

        int[] nums2 = {-1, -100, 3, 99};
        rotate(nums2, 2);
        System.out.println(Arrays.toString(nums2));
    }

    public static void rotate(int[] nums, int k) {
        int len = nums.length;
        k = k % len; // 如果k大于数组长度，则取模
        if (k == 0) return; // 如果k为0，则不需要旋转

        int[] temp = new int[k]; // 创建一个临时数组，用于存储最右边的k个元素
        for (int i = 0; i < k; i++) {
            temp[i] = nums[len - k + i];
        }
//        System.out.println("temp is " + Arrays.toString(temp));

        for (int i = len - 1; i >= k; i--) {
            nums[i] = nums[i - k];
        }
//        System.out.println("nums is " + Arrays.toString(nums));

        for (int i = 0; i < k; i++) {
            nums[i] = temp[i];
        }
    }
}
